﻿using CLM.Gestao.Administrador.BLL;
using CLM.Gestao.Administrador.UI;
using CLM.Gestao.Custos.UI;
using CLM.Gestao.Despesas.UI;
using CLM.Gestao.Rateios.UI;
using CLM.Gestao.Relatorios.UI;
using CLM.Gestao.Vendas.UI;
using Microsoft.Office.Tools.Ribbon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace CLM.Gestao.ExcelTemplate
{
    public partial class Menu
    {
        #region Propriedades

        public int AnoPeriodo { get; set; }

        // Lista para armazenar os objetos apresentados na interface
        List<Produto.Lista> ListaDivergenciasProdutos;
        List<Despesas.BLL.Despesa.Lista> ListaDespesas;

        #endregion Propriedades

        #region Atualiza Permissão de Acesso no Menu

        
        private void AtualizaPermissaoAcessoMenu()
        {
            // Administração
            btnUsuario.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoUsuario == true) ? true : false;
            btnPerfisAcesso.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoPerfilAcesso == true) ? true : false;
            btnPeriodos.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoPeriodo == true) ? true : false;
            btnSincronizarCentrosCusto.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizaCentroCusto == true) ? true : false;
            btnManutencaoCentrosCusto.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoCentroCusto == true) ? true : false;
            btnSincronizarContasContabeis.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizaContaContabil == true) ? true : false;
            btnManutencaoContasContabeis.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoContaContabil == true) ? true : false;
            btnSincronizarProdutosNacionais.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizaProdutos == true) ? true : false;
            btnImportarProdutosGlobais.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportacaoProdutoGlobal == true) ? true : false;
            btnImportarOrdemProdutosGlobais.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportacaoProdutoGlobal == true) ? true : false;
            btnManutencaoProduto.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ManutencaoProdutos == true) ? true : false;
            btnRelatorioDivergencias.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.RelatorioDivergenciaProdutos == true) ? true : false;

            // Integração
            btnImportarCustoUnitarioProdutos.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportaCustoUnitarioProduto == true) ? true : false;
            btnImportarCustoUnitarioAmostras.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportaCustoUnitarioAmostra == true) ? true : false;
            btnSincronizarVendas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizaVendaRealizada == true) ? true : false;
            btnImportarProvisoes.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportacaoProvisoesDevolucao == true) ? true : false;
            btnRelatorioVendas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.RelatorioIndicadoresVenda == true) ? true : false;
            btnImportarCustos.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportacaoCusto == true) ? true : false;
            btnSincronizarDespesasRealizadas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizarDespesasRealizadas == true) ? true : false;
            btnSincronizarOutrasDespesas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.SincronizarDespesasRealizadas == true) ? true : false;
            btnRelatorioDespesas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.RelatorioIndicadoresDespesas == true) ? true : false;

            // Apuração
            btnAlocacaoMMRA.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.AlocacaoDespesas == true) ? true : false;
            btnImportarDriversRateioGGF.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportarRateioGGF == true) ? true : false;
            btnImportarDriversRateioPromocao.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ImportarPromocaoGrade == true) ? true : false;
            btnCalcularRateiosProdutos.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.CalcularRateioProduto == true) ? true : false;
            btnExportarValoresVendas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ExportarVendas == true) ? true : false;
            btnExportarValoresCustosDespesas.Enabled = (Master.UsuarioAtivo != null && Master.UsuarioAtivo.PerfilAcesso != null && Master.UsuarioAtivo.PerfilAcesso.ExportarCustosDespesas == true) ? true : false;
        }

        #endregion

        private void Menu_Load(object sender, RibbonUIEventArgs e)
        {
            this.AtualizaUsuarioAtivo();
            this.AtualizaPeriodoAtivo();
            this.AtualizaExercicios();
            this.cboExercicio.Text = Master.PeriodoAtivo.AnoPeriodo.ToString();
            this.AtualizaPermissaoAcessoMenu();
        }

        #region Atualiza usuário ativo

        private void AtualizaUsuarioAtivo()
        {
            Master.RecuperaUsuarioAtivo();
            if (Master.UsuarioAtivo != null)
                lblNomeUsuario.Label = "Bem Vindo, " + Master.UsuarioAtivo.NomeUsuario;
        }

        #endregion Atualiza usuário ativo

        #region Atualiza período ativo

        public void AtualizaPeriodoAtivo()
        {
            Master.RecuperaPeriodoAtivo();
            if (Master.PeriodoAtivo != null)
                lblPeriodoAtivo.Label = "Mês de fechamento: " + Master.PeriodoAtivo.DescricaoPeriodo + " de " + Master.PeriodoAtivo.AnoPeriodo;

        }

        #endregion Atualiza período ativo

        #region Atualiza exercícios

        private RibbonDropDownItem CreateRibbonDropDownItem()
        {
            return this.Factory.CreateRibbonDropDownItem();
        }

        public void AtualizaExercicios()
        {
            this.cboExercicio.Items.Clear();
            Master.RecuperaExercicios();
            if (Master.Exercicios != null)
            {
                foreach (var item in Master.Exercicios)
                {
                    this.cboExercicio.Items.Add(CreateRibbonDropDownItem());
                    this.cboExercicio.Items.Last().Label = item.AnoExercicio;
                }
            }
        }

        #endregion Atualiza exercícios

        #region Menu Administração

        private void btnUsuario_Click(object sender, RibbonControlEventArgs e)
        {
            Usuarios frmUsuarios = new Usuarios();
            frmUsuarios.ShowDialog();
        }

        private void btnPerfisAcesso_Click(object sender, RibbonControlEventArgs e)
        {
            PerfisAcesso frmPerfisAcesso = new PerfisAcesso();
            frmPerfisAcesso.ShowDialog();
        }

        private void btnPeriodos_Click(object sender, RibbonControlEventArgs e)
        {
            Periodos frmPeriodos = new Periodos((int)Master.PeriodoAtivo.AnoPeriodo);
            frmPeriodos.OnChangeActivePeriod += new EventHandler(frmPeriodos_OnChangeActivePeriod);
            frmPeriodos.OnCreateNewYear += new EventHandler(frmPeriodos_OnCreateNewYear);
            frmPeriodos.ShowDialog();
        }

        private void frmPeriodos_OnCreateNewYear(object sender, EventArgs e)
        {
            Application.DoEvents();
            AtualizaExercicios();
        }

        private void frmPeriodos_OnChangeActivePeriod(object sender, EventArgs e)
        {
            AtualizaPeriodoAtivo();
            Application.DoEvents();
        }

        private void btnSincronizarCentrosCusto_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarCentroCusto frmSincronizarCentroCusto = new SincronizarCentroCusto();
            frmSincronizarCentroCusto.ShowDialog();
        }

        private void btnManutencaoCentrosCusto_Click(object sender, RibbonControlEventArgs e)
        {
            CentrosCusto frmCentroCusto = new CentrosCusto(Master.AnoPeriodo);
            frmCentroCusto.ShowDialog();
        }

        private void btnSincronizarContasContabeis_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarContaContabil frmSincronizarContaContabil = new SincronizarContaContabil();
            frmSincronizarContaContabil.ShowDialog();
        }

        private void btnManutencaoContasContabeis_Click(object sender, RibbonControlEventArgs e)
        {
            ContasContabeis frmContasContabeis = new ContasContabeis();
            frmContasContabeis.ShowDialog();
        }

        private void btnSincronizarProdutosNacionais_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarProduto frmSincronizarProduto = new SincronizarProduto();
            frmSincronizarProduto.ShowDialog();
        }

        private void btnImportarProdutosGlobais_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarProduto frmImportarProduto = new ImportarProduto();
            frmImportarProduto.ShowDialog();
        }

        private void btnImportarOrdemProdutosGlobais_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarOrdemProduto frmImportarOrdemProduto = new ImportarOrdemProduto();
            frmImportarOrdemProduto.ShowDialog();
        }

        private void btnImportarOrdemFamiliaProdutosGlobais_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarOrdemFamiliaProduto frmImportarOrdemFamiliaProduto = new ImportarOrdemFamiliaProduto();
            frmImportarOrdemFamiliaProduto.ShowDialog();
        }

        private void btnManutencaoProduto_Click(object sender, RibbonControlEventArgs e)
        {
            Produtos frmProduto = new Produtos();
            frmProduto.ShowDialog();
        }

        private void btnRelatorioDivergencias_Click(object sender, RibbonControlEventArgs e)
        {
            try
            {
                DivergenciaProdutos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #region Relatório apontando divergência entre os produtos Galderma Brasil e Galderma Global

        private void DivergenciaProdutos()
        {
            Produto produto = new Produto();
            ListaDivergenciasProdutos = produto.GetDivergenciasProdutos();

            string[] Cabecalho = { "Código Nacional", "Nome Nacional", "Código Global", "Nome Global" };
            List<string> ListaCampos = new List<string> { "CodigoProduto", "NomeProduto", "CodigoProdutoGlobal", "NomeProdutoGlobal" };

            Relatorio.Excel<Produto.Lista>.TipoRelatorio = Relatorio.TipoRelatorio.Simples;
            Relatorio.Excel<Produto.Lista>.Gerar(ListaDivergenciasProdutos, ListaCampos, Cabecalho, "Divergências de Produtos", "Divergencias", Globals.ThisWorkbook.Application);
        }

        #endregion Relatório apontando divergência entre os produtos Galderma Brasil e Galderma Global

        #endregion Menu Administração

        #region Menu Integração

        private void btnImportarCustoUnitarioProdutos_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarCustoUnitarioProdutos frmImportarCustoUnitarioProdutos = new ImportarCustoUnitarioProdutos();
            frmImportarCustoUnitarioProdutos.ShowDialog();
        }

        private void btnImportarCustoUnitarioAmostras_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarCustoUnitarioAmostras frmImportarCustoUnitarioAmostras = new ImportarCustoUnitarioAmostras();
            frmImportarCustoUnitarioAmostras.ShowDialog();
        }

        private void btnSincronizarVendas_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarVendas frmSincronizarVenda = new SincronizarVendas(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmSincronizarVenda.ShowDialog();
        }

        private void btnImportarProvisoes_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarProvisoes frmImportarProvisoes = new ImportarProvisoes(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmImportarProvisoes.ShowDialog();
        }

        private void btnRelatorioVendas_Click(object sender, RibbonControlEventArgs e)
        {
            RelatorioVendas frmRelatorioVendas = new RelatorioVendas(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo, Globals.ThisWorkbook.Application);
            frmRelatorioVendas.ShowDialog();
        }

        private void btnPremissasCalculoCusto_Click(object sender, RibbonControlEventArgs e)
        {

        }

        private void btnImportarCustos_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarCustos frmImportarCustos = new ImportarCustos(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmImportarCustos.ShowDialog();
        }

        private void btnSincronizarDespesasRealizadas_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarDespesa frmSincronizarDespesas = new SincronizarDespesa(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmSincronizarDespesas.ShowDialog();
        }

        private void btnSincronizarOutrasDespesas_Click(object sender, RibbonControlEventArgs e)
        {
            SincronizarOutrasDespesas frmSincronizarOutrasDespesas = new SincronizarOutrasDespesas(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmSincronizarOutrasDespesas.ShowDialog();
        }

        private void btnRelatorioDespesas_Click(object sender, RibbonControlEventArgs e)
        {
            try
            {
                RelatorioDespesas();
            }
            catch (Exception ex)
            {
                Exportacao.Texto.LogErro(ex, "Gerando relatório de despesas GERENCIAL");
                MessageBox.Show(ex.Message);
            }
        }

        private void btnRelatorioDespesasAnalitico_Click(object sender, RibbonControlEventArgs e)
        {
            try
            {
                RelatorioDespesasAnalitico();
            }
            catch (Exception ex)
            {
                Exportacao.Texto.LogErro(ex, "Gerando relatório de despesas BIRDS");
                MessageBox.Show(ex.Message);
            }
        }

        #region Relatório de Despesas

        private void RelatorioDespesas()
        {
            Despesas.BLL.Despesa Despesa = new Despesas.BLL.Despesa();

            ListaDespesas = Despesa.GerarRelatorioDespesas(int.Parse(cboExercicio.Text));

            string[] Cabecalho = { "Código Centro Custo", "Nome Centro Custo", "Categoria", "Código Conta Contábil", "Nome Conta Contábil", "Sub Conta", "Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez", "Total", "YTD" };
            List<string> ListaCampos = new List<string> { "CodigoCentroCusto", "NomeCentroCusto", "CategoriaCentroCusto", "CodigoContaContabil", "DescricaoContaContabil", "CategoriaContaContabil", "ValorJan", "ValorFev", "ValorMar", "ValorAbr", "ValorMai", "ValorJun", "ValorJul", "ValorAgo", "ValorSet", "ValorOut", "ValorNov", "ValorDez", "Valor", "ValorYTD" };

            Relatorio.Excel<Despesas.BLL.Despesa.Lista>.TipoRelatorio = Relatorio.TipoRelatorio.Simples;
            Relatorio.Excel<Despesas.BLL.Despesa.Lista>.Gerar(ListaDespesas, ListaCampos, Cabecalho, String.Format("Relatório de Indicadores de Despesas (GERENCIAL) - {0}", cboExercicio.Text), "Despesas_GERENCIAL", Globals.ThisWorkbook.Application);
        }

        private void RelatorioDespesasAnalitico()
        {
            Despesas.BLL.Despesa Despesa = new Despesas.BLL.Despesa();

            ListaDespesas = Despesa.GerarRelatorioDespesas(int.Parse(cboExercicio.Text), false);

            string[] Cabecalho = { "Código Centro Custo", "Nome Centro Custo", "Categoria", "Código Conta Contábil", "Nome Conta Contábil", "Sub Conta", "Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez", "Total", "YTD" };
            List<string> ListaCampos = new List<string> { "CodigoCentroCusto", "NomeCentroCusto", "CategoriaCentroCusto", "CodigoContaContabil", "DescricaoContaContabil", "CategoriaContaContabil", "ValorJan", "ValorFev", "ValorMar", "ValorAbr", "ValorMai", "ValorJun", "ValorJul", "ValorAgo", "ValorSet", "ValorOut", "ValorNov", "ValorDez", "Valor", "ValorYTD" };

            Relatorio.Excel<Despesas.BLL.Despesa.Lista>.TipoRelatorio = Relatorio.TipoRelatorio.Simples;
            Relatorio.Excel<Despesas.BLL.Despesa.Lista>.Gerar(ListaDespesas, ListaCampos, Cabecalho, String.Format("Relatório de Indicadores de Despesas (BIRDS) - {0}", cboExercicio.Text), "Despesas_BIRDS", Globals.ThisWorkbook.Application);
        }
        #endregion Relatório de Despesas

        #endregion Menu Integração

        #region Menu Apuração de Resultado

        private void btnAlocacaoMMRA_Click(object sender, RibbonControlEventArgs e)
        {
            CalcularAlocacoes frmCalcularAlocacoes = new CalcularAlocacoes(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmCalcularAlocacoes.ShowDialog();
        }

        private void btnImportarDriversRateioGGF_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarDriverGGF frmImportarDriverGGF = new ImportarDriverGGF(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmImportarDriverGGF.ShowDialog();
        }

        private void btnImportarDriversRateioPromocao_Click(object sender, RibbonControlEventArgs e)
        {
            ImportarDriverGradePromocional frmImportarDriverGrade = new ImportarDriverGradePromocional(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmImportarDriverGrade.ShowDialog();
        }

        private void btnCalcularRateiosProdutos_Click(object sender, RibbonControlEventArgs e)
        {
            CalcularRateios frmCalcularRateio = new CalcularRateios(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo);
            frmCalcularRateio.ShowDialog();
        }

        private void btnExportarRelatorioRateio_Click(object sender, RibbonControlEventArgs e)
        {
            Despesa.UI.RelatorioRateios frmRelatorioRateio = new Despesa.UI.RelatorioRateios(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo, Globals.ThisWorkbook.Application);
            frmRelatorioRateio.ShowDialog();
        }


        private void btnVisualizarPNL_Click(object sender, RibbonControlEventArgs e)
        {

        }

        private void btnPNLVendas_Click(object sender, RibbonControlEventArgs e)
        {
            PNLVendas frmPNLVendas = new PNLVendas(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo, Globals.ThisWorkbook.Application);
            frmPNLVendas.ShowDialog();
        }

        private void btnPNLCustosDespesas_Click(object sender, RibbonControlEventArgs e)
        {
            PNLCustosDespesas frmCustosDespesas = new PNLCustosDespesas(int.Parse(cboExercicio.Text), (int)Master.PeriodoAtivo.MesPeriodo, Globals.ThisWorkbook.Application);
            frmCustosDespesas.ShowDialog();
        }

        private void btnExportarValoresVendas_Click(object sender, RibbonControlEventArgs e)
        {

        }

        private void btnExportarValoresCustosDespesas_Click(object sender, RibbonControlEventArgs e)
        {

        }

        #endregion Menu Apuração de Resultado

        #region Menu Sair

        private void btnSair_Click(object sender, RibbonControlEventArgs e)
        {

        }

        #endregion Menu Sair




    }
}